#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
日志编码安全配置方案
为所有训练脚本提供统一的、安全的loguru配置
"""

import sys
import os

def configure_safe_logger():
    """
    配置安全的logger，避免emoji和特殊字符导致的编码问题
    适用于Windows环境
    """
    try:
        from loguru import logger
        
        # 移除默认处理器
        logger.remove()
        
        # 配置安全的格式（避免使用可能导致编码问题的emoji）
        safe_format = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level:<8} | {name}:{function}:{line} - {message}"
        
        # 添加文件输出（UTF-8编码）
        log_file = "training.log"
        logger.add(log_file, 
                  format=safe_format,
                  level="INFO",
                  encoding="utf-8",
                  rotation="10 MB")
        
        # 添加控制台输出（使用系统编码）
        try:
            # Windows特殊处理
            if sys.platform.startswith('win'):
                import locale
                console_encoding = locale.getpreferredencoding()
                
                # 创建自定义sink，安全处理编码
                class SafeConsoleSink:
                    def write(self, message):
                        try:
                            # 尝试使用UTF-8
                            sys.stdout.write(message)
                            sys.stdout.flush()
                        except UnicodeEncodeError:
                            # 如果失败，移除可能有问题的字符
                            safe_message = message.encode('ascii', errors='ignore').decode('ascii')
                            sys.stdout.write(safe_message)
                            sys.stdout.flush()
                
                logger.add(SafeConsoleSink(), format=safe_format, level="INFO")
            else:
                # 非Windows系统使用标准配置
                logger.add(sys.stdout, format=safe_format, level="INFO")
                
        except Exception:
            # 降级到最简单的配置
            logger.add(sys.stdout, format=safe_format, level="INFO")
        
        return logger
        
    except ImportError:
        # 如果loguru不可用，返回基本的print函数
        class BasicLogger:
            def info(self, msg):
                print(f"INFO: {msg}")
            def error(self, msg):
                print(f"ERROR: {msg}")
            def warning(self, msg):
                print(f"WARNING: {msg}")
        
        return BasicLogger()

# 导出配置函数
__all__ = ['configure_safe_logger']

if __name__ == "__main__":
    # 测试配置
    logger = configure_safe_logger()
    
    logger.info("测试安全日志配置")
    logger.info("中文测试: 大乐透训练开始") 
    logger.info("特殊字符测试: <>[]{}()")
    logger.info("数字测试: 123456789")
    logger.info("测试完成")
    
    print("安全日志配置测试完成！")